home *** CD-ROM | disk | FTP | other *** search
/ The World of Computer Software / The World of Computer Software.iso / s48.zip / MAIN.C < prev    next >
C/C++ Source or Header  |  1992-06-17  |  3KB  |  129 lines

  1. /*Copyright (c) 1992 by Richard Kelsey and Jonathan Rees.  See file COPYING.*/
  2.  
  3. #include <stdio.h>
  4. #include <sys/signal.h>
  5. #include <string.h>
  6.  
  7. #if !defined DEFAULT_HEAP_SIZE
  8. /* 1 megacell = 4 megabytes (2 meg per semispace) */
  9. #define DEFAULT_HEAP_SIZE 1000000 
  10. #endif
  11.  
  12. /* DEFAULT_IMAGE_NAME should be defined using the -D switch to cc. */
  13. #if !defined DEFAULT_IMAGE_NAME
  14. #define DEFAULT_IMAGE_NAME "s48.image"
  15. #endif
  16.  
  17. long I0()
  18. {
  19.   long v_47X;
  20.   extern long scheme48_init();
  21.  
  22.   v_47X = scheme48_init();
  23.   return(v_47X);
  24.  
  25. }
  26.  
  27. long I1(heap_size)
  28.      long heap_size;
  29. {
  30.   extern long Sinitial_heap_sizeS;
  31.  
  32.   Sinitial_heap_sizeS = heap_size;
  33.   return(54321);
  34.  
  35. }
  36.  
  37. long I2(image_name, argument)
  38.      char *image_name, *argument;
  39. {
  40.   long v_58X;
  41. /*  long v_56X, v_58X, argx; */
  42.   extern long resume();
  43. /*  extern long SvalS;*/
  44. /*
  45.   { long len;
  46.     char *temp;
  47.     len = strlen(image_name);
  48.     temp = (char *)(calloc(len + 4, sizeof(char)));
  49.     *((long *)temp) = len;
  50.     strncpy(temp + 4, image_name, len);
  51.     v_56X = (4 + (long)temp);
  52.   }
  53.  
  54.   { char *temp;
  55.     len = strlen(argument);
  56.     temp = (char *)(calloc(len + 4, sizeof(char)));
  57.     strncpy(temp + 4, argument, len); */
  58. /* Header tag is 2, string type is 9, extend tag is 3 */ 
  59. /*    *((long *)temp) = (len << 7) + (9 << 2) + 2;
  60.     argx = (3 + 4 + (long)temp);
  61.   }
  62. */
  63.   v_58X = resume((long)image_name, (long)argument);
  64.   exit(v_58X >> 2);
  65.  
  66. }
  67.  
  68. void when_interrupt(sig, code, scp)
  69.      int sig, code; 
  70.      struct sigcontext *scp;
  71. {
  72.   extern long Spending_interruptsS;
  73.   Spending_interruptsS |= 2;
  74.   signal(SIGINT, when_interrupt);
  75.   return;
  76. }
  77.  
  78. main(argc, argv)
  79.      int argc; char **argv;
  80. {
  81.   char *image_name = DEFAULT_IMAGE_NAME;
  82.   char *argument = "";
  83.   long heap_size = DEFAULT_HEAP_SIZE; /* in numbers of cells. */
  84.   int errors = 0;
  85.   char *me = *argv;        /* Save program name. */
  86.  
  87.   argv++; argc--;        /* Skip program name. */
  88.  
  89.   for (; argc > 0; argc--, argv++)
  90.     if (argv[0][0] == '-')
  91.       switch (argv[0][1]) {
  92.       case 'h':
  93.     argc--; argv++;
  94.     if (argc == 0) { errors++; break; }
  95.     heap_size = atoi(*argv) / sizeof(long);
  96.     if (heap_size <= 0) errors++;
  97.     break;
  98.       case 'i':
  99.     argc--; argv++;
  100.     if (argc == 0) { errors++; break; }
  101.     image_name = *argv;
  102.     break;
  103.       case 'a':
  104.     argc--; argv++;
  105.     if (argc == 0) { errors++; break; }
  106.     argument = *argv;
  107.     break;
  108.       default:
  109.     fprintf(stderr, "Invalid argument: %s\n", *argv);
  110.     errors++;
  111.       }
  112.     else
  113.       if (argv[0][0] != '\0') 
  114.     { fprintf(stderr, "Invalid argument: %s\n", *argv);
  115.       errors++; }
  116.   if (errors != 0) {
  117.     fprintf(stderr,
  118.         "Usage: %s [-h <heap size in bytes>] [-i <image file name>]\n",
  119.         me);
  120.     exit(1);
  121.   }
  122.  
  123.   I0();
  124.   I1(heap_size);
  125.   signal(SIGINT, when_interrupt);
  126.   I2(image_name, argument);
  127. }
  128.  
  129.